////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  aftofelements.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "aftofelements.h"
#include "parametersetmanager.h"

AFTOFELEMENTS_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixTOFTypeClass::chromatixTOFTypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, 0, 0, 0, 0)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(sensitivity);
    PARAMETER_INITIALIZE(outdoorLuxIdx);
    PARAMETER_INITIALIZE(TOFFlag);
    PARAMETER_INITIALIZE(Filter);
    PARAMETER_INITIALIZE(FrameDelay);
    PARAMETER_INITIALIZE(SceneChange);
    PARAMETER_INITIALIZE(FocusConverge);
    PARAMETER_INITIALIZE(FineScan);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixTOFTypeClass::chromatixTOFTypeClass(
    const CHAR* name,
    UINT32 modeId,
    UINT16 mode,
    UINT16 subMode,
    UINT32 group)
    : ParameterModule(name, MAJOR, MINOR, PATCH, modeId, mode, subMode, group)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(sensitivity);
    PARAMETER_INITIALIZE(outdoorLuxIdx);
    PARAMETER_INITIALIZE(TOFFlag);
    PARAMETER_INITIALIZE(Filter);
    PARAMETER_INITIALIZE(FrameDelay);
    PARAMETER_INITIALIZE(SceneChange);
    PARAMETER_INITIALIZE(FocusConverge);
    PARAMETER_INITIALIZE(FineScan);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixTOFTypeClass::~chromatixTOFTypeClass()
{
    UnloadchromatixTOFType(this);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixTOFTypeClass::GetName(
    const CHAR* type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ParameterFileSymbolTableEntry::GetType(temp, "chromatixTOF")) == 0)
    {
        name = "chromatixTOF";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTOFSceneChangeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTOFTypeClass::LoadchromatixTOFSceneChangeType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTOFSceneChangeType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->scene_change_distance_std_dev_thres);
    result = result && entry->ReadInt32(&structure->far_distance_unstable_cnt_factor);
    result = result && entry->ReadInt32(&structure->panning_stable_cnt);
    result = result && entry->ReadInt32(&structure->panning_stable_thres);
    result = result && entry->ReadInt32(&structure->normal_light_cnt);
    result = result && entry->ReadInt32(&structure->lowlight_cnt);
    result = result && entry->ReadInt32(&structure->num_monitor_samples);

    // Reading structure->scene_change_distance_thres from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->scene_change_distance_thresCount);
        structure->scene_change_distance_thresID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->scene_change_distance_thres   = PARAMETER_NEW INT32[structure->scene_change_distance_thresCount];
        }
        if (!result || structure->scene_change_distance_thres == NULL)
        {
            structure->scene_change_distance_thresCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->scene_change_distance_thresCount; i++)
        {
            result = result && pointerEntry1->ReadInt32(&structure->scene_change_distance_thres[i]);
        }
    }

    // Reading structure->distance_region from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->distance_regionCount);
        structure->distance_regionID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->distance_region   = PARAMETER_NEW INT32[structure->distance_regionCount];
        }
        if (!result || structure->distance_region == NULL)
        {
            structure->distance_regionCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->distance_regionCount; i++)
        {
            result = result && pointerEntry1->ReadInt32(&structure->distance_region[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTOFFineScanType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTOFTypeClass::LoadchromatixTOFFineScanType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTOFFineScanType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->num_near_steps_near_direction);
    result = result && entry->ReadInt32(&structure->num_far_steps_near_direction);
    result = result && entry->ReadInt32(&structure->num_near_steps_far_direction);
    result = result && entry->ReadInt32(&structure->num_far_steps_far_direction);
    result = result && entry->ReadInt32(&structure->num_near_steps_far_converge_point);
    result = result && entry->ReadInt32(&structure->num_far_steps_far_converge_point);
    result = result && entry->ReadInt32(&structure->near_steps_far_direction_tof_conf);
    result = result && entry->ReadInt32(&structure->tof_step_size);
    result = result && entry->ReadInt32(&structure->tof_step_size_low_light);
    result = result && entry->ReadInt32(&structure->far_distance_fine_step_size);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTOFFocusConvergeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTOFTypeClass::LoadchromatixTOFFocusConvergeType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTOFFocusConvergeType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->jump_to_start_limit);
    result = result && entry->ReadInt32(&structure->jump_to_start_limit_low_light);
    result = result && entry->ReadInt32(&structure->start_pos_for_tof);
    result = result && entry->ReadInt32(&structure->far_converge_point);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTOFFrameDelayType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTOFTypeClass::LoadchromatixTOFFrameDelayType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTOFFrameDelayType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->frame_delay_focus_converge_bright_light);
    result = result && entry->ReadInt32(&structure->frame_delay_focus_converge_low_light);
    result = result && entry->ReadInt32(&structure->frame_delay_fine_search_bright_light);
    result = result && entry->ReadInt32(&structure->frame_delay_fine_search_low_light);
    result = result && entry->ReadInt32(&structure->frame_delay_outdoor_light);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTOFFlagType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTOFTypeClass::LoadchromatixTOFFlagType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTOFFlagType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->use_custom_sensitivity);
    result = result && entry->ReadInt32(&structure->enable_sad_when_tof_is_conf);
    result = result && entry->ReadInt32(&structure->run_tof_in_outdoor_light_flag);
    result = result && entry->ReadInt32(&structure->aec_wait_check_flag_enable);
    result = result && entry->ReadInt32(&structure->far_scene_coarse_srch_enable);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTOFFilterType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTOFTypeClass::LoadchromatixTOFFilterType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTOFFilterType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->median_filter_enable);
    result = result && entry->ReadInt32(&structure->median_filter_num_of_samples);
    result = result && entry->ReadInt32(&structure->average_filter_enable);
    result = result && entry->ReadInt32(&structure->average_filter_num_of_samples);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTOFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTOFTypeClass::LoadchromatixTOFType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTOFType* structure)
{
    BOOL result = TRUE;
    result = result && Loadmodule_versionStruct(entry, &structure->module_version);
    result = result && Loadparameter_versionStruct(entry, &structure->parameter_version);
    result = result && entry->ReadFloat(&structure->sensitivity);
    result = result && entry->ReadInt32(&structure->outdoorLuxIdx);
    result = result && LoadchromatixTOFFlagType(entry, &structure->TOFFlag);
    result = result && LoadchromatixTOFFilterType(entry, &structure->Filter);
    result = result && LoadchromatixTOFFrameDelayType(entry, &structure->FrameDelay);
    result = result && LoadchromatixTOFSceneChangeType(entry, &structure->SceneChange);
    result = result && LoadchromatixTOFFocusConvergeType(entry, &structure->FocusConverge);
    result = result && LoadchromatixTOFFineScanType(entry, &structure->FineScan);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTOFTypeClass::Loadmodule_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixTOFType::module_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTOFTypeClass::Loadparameter_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixTOFType::parameter_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixTOFSceneChangeType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTOFTypeClass::UnloadchromatixTOFSceneChangeType(
    chromatixTOFSceneChangeType* structure)
{
    PARAMETER_DELETE[] structure->scene_change_distance_thres;
    PARAMETER_DELETE[] structure->distance_region;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixTOFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTOFTypeClass::UnloadchromatixTOFType(
    chromatixTOFType* structure)
{
    UnloadchromatixTOFSceneChangeType(&structure->SceneChange);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Parse symbol table entry, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixTOFTypeClass::Parse(
    ParameterSetManager* manager,
    ParameterFileSymbolTableEntry* entry) const
{
    chromatixTOFTypeClass* cls = NULL;

    if (PARAMETER_STRCMP(Type, entry->Type) == 0 && Major == entry->Major &&
        Minor == entry->Minor && Patch == entry->Patch)
    {
        cls = PARAMETER_NEW chromatixTOFTypeClass(GetName(entry->Type), 
            entry->ModeId, entry->Mode, entry->SubMode, entry->Group);
        if (cls != NULL)
        {
            BOOL result = TRUE;

            cls->SymbolTableID = entry->ID;
            cls->ID            = entry->ID;

            result = result && LoadchromatixTOFType(entry, cls);

            if (!result)
            {
                PARAMETER_DELETE cls;
                cls = NULL;
            }
        }
    }
    return (ParameterModule*)cls;
}


AFTOFELEMENTS_NAMESPACE_END
